🏫 API de Turmas e Horários - Documentação Completa
📋 Visão Geral
A API de Turmas e Horários é responsável por toda a gestão de turmas, horários e associações de usuários no sistema CordenaAi. Inclui funcionalidades para gerenciar turmas, criar horários específicos, associar usuários a turmas e horários, além de consultas avançadas para relatórios e dashboards.
🎯 Endpoints Disponíveis
🏫 Turmas - Gestão de Turmas
1. GET /api/turmas
Listar Todas as Turmas
- Descrição: Retorna lista completa de todas as turmas cadastradas no sistema
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos TurmaReadDto
- Uso: Dashboard administrativo, listagem geral de turmas
2. GET /api/turmas/{id}
Obter Turma por ID
- Descrição: Retorna dados completos de uma turma específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da turma
- Resposta: Objeto TurmaReadDto completo
- Uso: Visualização de detalhes de turma
3. GET /api/turmas/unidade/{unidadeId}
Obter Turmas por Unidade
- Descrição: Retorna todas as turmas de uma unidade específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
unidadeId (path): ID único da unidade
- Resposta: Array de objetos TurmaReadDto
- Uso: Gestão de turmas por unidade, relatórios organizacionais
4. POST /api/turmas
Criar Turma
- Descrição: Cria nova turma no sistema
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto TurmaCreateDto
- Resposta: Objeto TurmaReadDto criado
- Uso: Cadastro de novas turmas
5. PUT /api/turmas/{id}
Atualizar Turma
- Descrição: Atualiza dados de uma turma existente
- Método: PUT
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da turma
- Body: Objeto TurmaUpdateDto
- Resposta: Objeto TurmaReadDto atualizado
- Uso: Alteração de dados da turma
6. DELETE /api/turmas/{id}
Excluir Turma
- Descrição: Remove turma do sistema
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da turma
- Resposta: 204 No Content
- Uso: Remoção de turmas
📚 UsuarioTurmas - Gestão de Usuários em Turmas
1. GET /api/usuarioturmas/usuario/{identificador}
Obter Turmas por Usuário
- Descrição: Retorna todas as turmas associadas a um usuário específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
identificador (path): ID, email, CPF ou username do usuário
- Resposta: Array de objetos UsuarioTurma
- Uso: Interface do usuário para visualizar suas turmas
2. GET /api/usuarioturmas/turma/{turmaId}
Obter Usuários por Turma
- Descrição: Retorna todos os usuários associados a uma turma específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
turmaId (path): ID único da turma
- Resposta: Array de objetos UsuarioTurma
- Uso: Gestão de turmas, listagem de participantes
3. GET /api/usuarioturmas/turma/{turmaId}/papel/{papel}
Obter Usuários por Turma e Papel
- Descrição: Retorna usuários de uma turma com papel específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
turmaId (path): ID único da turma
papel (path): Papel/função do usuário na turma
- Resposta: Array de objetos UsuarioTurma
- Uso: Filtrar professores, alunos, responsáveis por turma
4. GET /api/usuarioturmas/{id}
Obter Associação por ID
- Descrição: Retorna dados de uma associação usuário-turma específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da associação
- Resposta: Objeto UsuarioTurma completo
- Uso: Visualização de detalhes de associação
5. POST /api/usuarioturmas
Criar Associação Usuário-Turma
- Descrição: Cria nova associação entre usuário e turma
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto UsuarioTurmaCreateDto
- Resposta: Objeto UsuarioTurma criado
- Uso: Matrícula de usuários em turmas
6. PUT /api/usuarioturmas/{id}
Atualizar Associação
- Descrição: Atualiza dados de uma associação existente
- Método: PUT
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da associação
- Body: Objeto UsuarioTurmaUpdateDto
- Resposta: Objeto UsuarioTurma atualizado
- Uso: Alteração de papel do usuário na turma
7. DELETE /api/usuarioturmas/{id}
Excluir Associação
- Descrição: Remove associação entre usuário e turma
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da associação
- Resposta: 204 No Content
- Uso: Desmatrícula de usuários
⏰ HorarioTurmas - Gestão de Horários de Turmas
1. GET /api/horarioturmas
Obter Todos os Horários
- Descrição: Retorna lista completa de todos os horários cadastrados
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros: Nenhum
- Resposta: Array de objetos HorarioTurma com usuários associados
- Uso: Dashboard administrativo, relatórios gerais
2. GET /api/horarioturmas/turma/{turmaId}
Obter Horários por Turma
- Descrição: Retorna todos os horários de uma turma específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
turmaId (path): ID único da turma
- Resposta: Array de objetos HorarioTurma
- Uso: Gestão de horários por turma, grade de horários
3. GET /api/horarioturmas/{id}
Obter Horário por ID
- Descrição: Retorna dados completos de um horário específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do horário
- Resposta: Objeto HorarioTurma completo com usuários
- Uso: Visualização de detalhes de horário
4. POST /api/horarioturmas
Criar Horário
- Descrição: Cria novo horário para uma turma
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto HorarioTurmaCreateDto
- Resposta: Objeto HorarioTurma criado
- Uso: Cadastro de novos horários
5. PUT /api/horarioturmas/{id}
Atualizar Horário
- Descrição: Atualiza dados de um horário existente
- Método: PUT
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do horário
- Body: Objeto HorarioTurmaUpdateDto
- Resposta: Objeto HorarioTurma atualizado
- Uso: Alteração de horários
6. DELETE /api/horarioturmas/{id}
Excluir Horário
- Descrição: Remove horário do sistema
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do horário
- Resposta: 204 No Content
- Uso: Remoção de horários
🔗 HorarioUsuarios - Gestão de Associações Horário-Usuário
1. GET /api/horariousuarios/horario/{horarioId}
Obter Usuários por Horário
- Descrição: Retorna todos os usuários associados a um horário específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
horarioId (path): ID único do horário
- Resposta: Array de objetos HorarioUsuario
- Uso: Lista de presença, gestão de participantes
2. GET /api/horariousuarios/usuario/{identificador}
Obter Horários por Usuário
- Descrição: Retorna todos os horários de um usuário específico
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
identificador (path): ID, email, CPF ou username do usuário
- Resposta: Array de objetos HorarioUsuario
- Uso: Agenda pessoal do usuário
3. GET /api/horariousuarios/{id}
Obter Associação por ID
- Descrição: Retorna dados de uma associação horário-usuário específica
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da associação
- Resposta: Objeto HorarioUsuario completo
- Uso: Visualização de detalhes de associação
4. POST /api/horariousuarios
Criar Associação Horário-Usuário
- Descrição: Cria nova associação entre horário e usuário
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto HorarioUsuarioCreateDto
- Resposta: Objeto HorarioUsuario criado
- Uso: Inscrição de usuários em horários específicos
5. PUT /api/horariousuarios/{id}
Atualizar Associação
- Descrição: Atualiza dados de uma associação existente
- Método: PUT
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da associação
- Body: Objeto HorarioUsuarioUpdateDto
- Resposta: Objeto HorarioUsuario atualizado
- Uso: Alteração de papel do usuário no horário
6. DELETE /api/horariousuarios/{id}
Excluir Associação
- Descrição: Remove associação entre horário e usuário
- Método: DELETE
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único da associação
- Resposta: 204 No Content
- Uso: Desinscrição de usuários
🎯 TurmaHorario - Endpoints Específicos de Gestão
1. POST /api/turma/criar-horario
Criar Horário para Turma
- Descrição: Endpoint específico para criação de horários em turmas
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Body: Objeto HorarioTurmaCreateDto
- Resposta: Objeto HorarioTurma criado
- Uso: Interface simplificada para criação de horários
2. POST /api/turma/horario/{horarioId}/associar-usuario
Associar Usuário ao Horário
- Descrição: Endpoint específico para associar usuário a um horário
- Método: POST
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
horarioId (path): ID único do horário
- Body: Objeto HorarioUsuarioCreateDto
- Resposta: Objeto HorarioUsuario criado
- Uso: Interface simplificada para associação de usuários
3. GET /api/turma/horario/{id}
Obter Horário Específico
- Descrição: Retorna dados completos de um horário com usuários associados
- Método: GET
- Autenticação: Requerida (JWT Bearer Token)
- Parâmetros:
id (path): ID único do horário
- Resposta: Objeto HorarioTurma completo
- Uso: Visualização detalhada de horário
🔧 Modelo de Dados
Turma
{
"id": 1,
"nome": "Futsal Infantil (6-8 anos)",
"unidadeId": 1,
"unidadeNome": "Unidade Centro",
"responsavelId": "user-guid-here",
"responsavelNome": "João Silva",
"status": 1,
"dataCadastro": "2025-01-15T10:30:00Z",
"dataAtualizacao": null
}
UsuarioTurma
{
"id": 1,
"usuarioId": "user-guid-here",
"usuarioNome": "João Silva",
"turmaId": 1,
"turmaNome": "Futsal Infantil",
"papelNaTurma": 1,
"dataCadastro": "2025-01-15T10:30:00Z",
"dataAtualizacao": null
}
HorarioTurma
{
"id": 1,
"turmaId": 1,
"turmaNome": "Futsal Infantil",
"descHorario": "08:30 as 12:30",
"usuarios": [
{
"id": 1,
"horarioId": 1,
"horarioDescricao": "08:30 as 12:30",
"usuarioId": "user-guid-here",
"usuarioNome": "João Silva",
"papelId": 1,
"papelNome": "Professor"
}
]
}
HorarioUsuario
{
"id": 1,
"horarioId": 1,
"horarioDescricao": "08:30 as 12:30",
"usuarioId": "user-guid-here",
"usuarioNome": "João Silva",
"papelId": 1,
"papelNome": "Professor"
}
🔐 Autenticação e Autorização
Todos os endpoints requerem:
- JWT Bearer Token no header
Authorization
- Permissões específicas baseadas no tipo de usuário:
- Administradores: Acesso completo a todos os endpoints
- Professores: Acesso aos horários e turmas onde atuam
- Alunos: Acesso limitado aos seus horários e turmas
- Responsáveis: Acesso aos horários e turmas de seus dependentes
📊 Casos de Uso Principais
1. Gestão de Turmas
POST /api/turmas
Content-Type: application/json
Authorization: Bearer {token}
{
"nome": "Futsal Infantil (6-8 anos)",
"unidadeId": 1,
"responsavelId": "user-guid-here",
"status": 1
}
2. Associação de Usuários a Turmas
POST /api/usuarioturmas
Content-Type: application/json
Authorization: Bearer {token}
{
"usuarioId": "user-guid-here",
"turmaId": 1,
"papelNaTurma": 1
}
3. Criação de Horários
POST /api/turma/criar-horario
Content-Type: application/json
Authorization: Bearer {token}
{
"turmaId": 1,
"descHorario": "08:30 as 12:30"
}
4. Associação de Usuários a Horários
POST /api/turma/horario/1/associar-usuario
Content-Type: application/json
Authorization: Bearer {token}
{
"usuarioId": "user-guid-here",
"papelId": 1
}
5. Consulta de Horários por Usuário
GET /api/horariousuarios/usuario/user-guid-here
Authorization: Bearer {token}
6. Consulta de Usuários por Horário
GET /api/horariousuarios/horario/1
Authorization: Bearer {token}
7. Consulta de Turmas por Unidade
GET /api/turmas/unidade/1
Authorization: Bearer {token}
⚠️ Validações e Regras de Negócio
Validações Obrigatórias
- Nome: Obrigatório, máximo 200 caracteres
- UnidadeId: Obrigatório, deve existir no sistema
- ResponsavelId: Opcional, deve existir no sistema se informado
- Status: Obrigatório, deve ser válido
- UsuarioId: Obrigatório, deve existir no sistema
- TurmaId: Obrigatório, deve existir no sistema
- HorarioId: Obrigatório, deve existir no sistema
- PapelId: Obrigatório, deve existir no sistema de relações
- DescHorario: Obrigatório, máximo 200 caracteres
Regras de Negócio
- Associação única: Usuário não pode estar duplicado no mesmo horário
- Papel válido: Papel deve existir no sistema de relações
- Turma ativa: Só é possível associar usuários a turmas ativas
- Horário válido: Horário deve estar dentro do período de funcionamento
- Unidade válida: Turma deve pertencer a uma unidade existente
- Responsável válido: Responsável deve ser um usuário válido
- Soft Delete: Associações inativadas não são excluídas permanentemente
- Auditoria: Todas as operações são logadas
🚨 Tratamento de Erros
Códigos de Status HTTP
- 200: Sucesso
- 201: Criado com sucesso
- 400: Dados inválidos
- 401: Não autorizado
- 403: Acesso negado
- 404: Recurso não encontrado
- 409: Conflito (associação já existe)
- 500: Erro interno do servidor
Formato de Erro
{
"error": "string",
"message": "string",
"details": "string",
"timestamp": "datetime"
}
📈 Performance e Limitações
Limitações
- Paginação: Listas retornam máximo 100 registros por página
- Rate Limiting: 1000 requests por hora por usuário
- Timeout: 30 segundos por requisição
Otimizações
- Cache: Dados de horários são cacheados por 5 minutos
- Índices: Busca otimizada por usuário, turma e horário
- Compressão: Respostas comprimidas com gzip
🔄 Integração com Outros Módulos
Módulos Relacionados
- Instituições: Contexto organizacional
- Unidades: Localização das turmas
- Usuários: Associação obrigatória
- Relações: Definição de papéis/funções
- Endereços: Localização dos usuários
📱 Uso em Aplicações
Web App
- Dashboard de gestão de turmas
- Interface de criação de horários
- Relatórios de presença
- Gestão de usuários por turma
- Grade de horários por unidade
Mobile App
- Visualização de horários pessoais
- Notificações de horários
- Check-in/Check-out
- Agenda pessoal
- Lista de turmas do usuário
🛠️ Manutenção e Monitoramento
Logs Importantes
- Criação de novas turmas
- Criação de novas associações
- Alterações de horários
- Tentativas de acesso não autorizado
- Erros de validação
Métricas Monitoradas
- Número de turmas ativas
- Número de associações ativas
- Taxa de sucesso das operações
- Tempo de resposta dos endpoints
- Uso de recursos por endpoint
📚 Exemplos Práticos
Fluxo Completo de Criação de Turma com Horários
- Criar turma via
POST /api/turmas
- Criar horários via
POST /api/turma/criar-horario
- Associar usuários à turma via
POST /api/usuarioturmas
- Associar usuários aos horários via
POST /api/turma/horario/{id}/associar-usuario
- Verificar associações via
GET /api/horariousuarios/horario/{id}
Fluxo de Consulta de Agenda
- Obter usuário por identificador
- Buscar turmas via
GET /api/usuarioturmas/usuario/{identificador}
- Buscar horários via
GET /api/horariousuarios/usuario/{identificador}
- Filtrar por período no frontend
- Exibir agenda formatada
Fluxo de Gestão por Unidade
- Listar turmas da unidade via
GET /api/turmas/unidade/{unidadeId}
- Para cada turma, listar horários via
GET /api/horarioturmas/turma/{turmaId}
- Para cada horário, listar usuários via
GET /api/horariousuarios/horario/{horarioId}
- Gerar relatório consolidado
Versão: 1.0
Última Atualização: Outubro de 2025
Responsável: Equipe de Desenvolvimento CordenaAi